/***************************************************
 @Name :        小铭同学
 @Time :        2022-10-30
 @Email :       LiaoMingWJ233@163.com
 @Comment :     系统用到的gpio配置
 @FileName :    gpio.c
 @Version :     1.0
****************************************************/


#include "gpio.h"


/*-----------------------------  用于电机方向控制的引脚  -----------------------------*/

static void gpio_motor_init(void)
{
  __HAL_RCC_GPIOA_CLK_ENABLE();             
  __HAL_RCC_GPIOB_CLK_ENABLE();             
  __HAL_RCC_GPIOC_CLK_ENABLE();             
  
  GPIO_InitTypeDef gpio_config;
  gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_5;
  gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOA, &gpio_config);

  gpio_config.Pin = GPIO_PIN_14 | GPIO_PIN_15;
  gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &gpio_config);

  gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
  gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOC, &gpio_config);
}


/*-----------------------------  用于灰度传感器的引脚  -----------------------------*/

/* 白线为0 黑色为1 */
static void gpio_gray_init(void)
{
  GPIO_InitTypeDef gpio_config;

  __HAL_RCC_GPIOB_CLK_ENABLE();               //开启GPIOB时钟
  __HAL_RCC_GPIOC_CLK_ENABLE();               //开启GPIOC时钟
  __HAL_RCC_GPIOD_CLK_ENABLE();               //开启GPIOD时钟
  __HAL_RCC_AFIO_CLK_ENABLE();                //开启端口重映射时钟
  __HAL_AFIO_REMAP_SWJ_NOJTAG();              //关闭JTAG接口（PA3、PA4接口与JTAG接口冲突）

  gpio_config.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;
  gpio_config.Mode = GPIO_MODE_INPUT;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &gpio_config);

  gpio_config.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_14 | GPIO_PIN_15;
  gpio_config.Mode = GPIO_MODE_INPUT;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOC, &gpio_config);

  gpio_config.Pin = GPIO_PIN_2;
  gpio_config.Mode = GPIO_MODE_INPUT;
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOD, &gpio_config);

  //左右灰度传感器配置成外部事件中断//
  gpio_config.Pin = GPIO_PIN_5;               //PG0 PG1
  gpio_config.Mode = GPIO_MODE_INPUT;;     //上升下降沿触发
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &gpio_config);

  gpio_config.Pin = GPIO_PIN_13;                      //PB13
  gpio_config.Mode = GPIO_MODE_INPUT;;     //上升下降沿触发
  gpio_config.Pull = GPIO_PULLUP;
  gpio_config.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOC, &gpio_config);
}

/*-----------------------------  用于彩色灯条的引脚  -----------------------------*/
static void gpio_rgb_led_init(void)
{
//  GPIO_InitTypeDef GPIO_Initure;
//  __HAL_RCC_GPIOA_CLK_ENABLE();

//  GPIO_Initure.Pin=GPIO_PIN_0; 
//  GPIO_Initure.Mode=GPIO_MODE_AF_PP;  		 //推挽输出
//  GPIO_Initure.Pull=GPIO_NOPULL;           		 //上拉
//  GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;     //高速
//  HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}


/*-----------------------------  用于超声波收发的的引脚  -----------------------------*/

static void gpio_ultrasonic_init(void)
{
	GPIO_InitTypeDef GPIO_Initure;

	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	GPIO_Initure.Pin=GPIO_PIN_12;            /* trig */
  GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;   //输出
  GPIO_Initure.Pull=GPIO_PULLDOWN;        //下拉
  GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;     //高速
  HAL_GPIO_Init(GPIOB,&GPIO_Initure);
	
	GPIO_Initure.Pin=GPIO_PIN_15;         /* echo */     
  GPIO_Initure.Mode=GPIO_MODE_INPUT;  
  GPIO_Initure.Pull=GPIO_PULLDOWN; 
  HAL_GPIO_Init(GPIOA,&GPIO_Initure);
  
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
}


/*-----------------------------  用到的全部GPIO初始化  -----------------------------*/

void gpio_init(void)
{
  gpio_motor_init();
  gpio_gray_init();
  gpio_rgb_led_init();
  gpio_ultrasonic_init();
}

